/*
 * Copyright 2002-2014 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      CC/LICENSE
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifndef  __THREADPOOL_H_
#define  __THREADPOOL_H_

#include <vector>
#include <bgcc.h>
#include "session_thread.h"
#include "singleton.h"

namespace ims {

class threadpool_t : public bgcc::Shareable {
public:
    threadpool_t():
        _size(20),
        _timeout(2000),
        _isstart(false) {
    }
    threadpool_t(int32_t size, int32_t task_timeout);
    ~threadpool_t();

    void start();
    void stop();

    session_thread_ptr get_prefer_thread();

    void set(int32_t size, int32_t timeout) {
        _size = size;
        _timeout = timeout;
    }

    int32_t size() {
        return _size;
    }


private:
    int32_t                             _size;
    int32_t                             _timeout;
    std::vector<session_thread_ptr>     _threads;
    bgcc::Mutex                         _mutex;
    bool                                _isstart;
};

typedef singleton_t<threadpool_t>  session_thrd_mgr;


}













#endif  //__THREADPOOL_H_

/* vim: set ts=4 sw=4 sts=4 tw=100 noet: */
